package com.work.flow.common;

import com.work.flow.model.Link;
import com.work.flow.model.Node;
import org.apache.commons.lang.StringUtils;

import java.util.ArrayList;
import java.util.List;

public class NodeCalculationModel {
    /**
     * 根据连线对节点进行排序
     * @param nodes
     * @param links
     * @return
     */
    public static List<Node> getNodesByOrder(List<Node> nodes,List<Link> links) throws Exception {
        if(nodes==null||nodes.size()<=1){
            return nodes;
        }
        if(links==null||links.size()==0){
            throw new Exception("数据异常");
        }
        //计算起点
        List<String>  ids=new ArrayList<>();
        String startId="";

        for (int i = 0; i < links.size(); i++) {
            String id=links.get(i).getStartId();
            if(StringUtils.isBlank(id)){
                ids.add(links.get(i).getEndId());
                break;
            }
            boolean isStart=true;
            for (Link link : links) {
                if (id.equals(link.getEndId())) {
                    isStart = false;
                    break;
                }

            }
            //找到起点
            if(isStart){
                startId=id;
                ids.add(startId);
                ids.add(links.get(i).getEndId());
                break;
            }

        }
        //计算后续节点
        for (int i = 1; i < links.size(); i++) {
            System.out.println(ids);
            String id=getNextId(links,ids.get(ids.size()-1));
            if(StringUtils.isNotBlank(id)){
                ids.add(id);
            }
        }
        //排序nodes
        List<Node> nodes1=new ArrayList<>(nodes.size());
        for (int i = 0; i < ids.size(); i++) {
            String id=ids.get(i);
            for (int j = 0; j < nodes.size(); j++) {
                if(id.equals(nodes.get(j).getId())){
                    nodes1.add(nodes.get(j));
                    break;
                }
            }


        }
        return nodes1;
    }

    static String getNextId(List<Link> links,String startId){
        for (int i = 0; i < links.size(); i++) {
            String id=links.get(i).getStartId();
            System.out.println(startId);
            System.out.println(id);
            if(startId.equals(id)){
                return links.get(i).getEndId();
            }
        }
        return null;
    }
}
